package 双指针.盛水最多的容器;
/**
 * 题目描述
 * 给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
 * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 * 返回容器可以储存的最大水量。
 * 说明：你不能倾斜容器。
 * 力扣：https://leetcode-cn.com/problems/container-with-most-water/
 * 力扣第 11
 * */
/**
 * 题目思路：
 * 双指针，两头往中间夹
 * 左指针指向最左边
 * 右指针指向最右边
 * 每次只移动较矮的那一边
 * 不断重复，更新最大值
 * 直到left >= right停止
 * */
class Solution {
    public int maxArea(int[] height) {
        int left = 0; // 左指针，从最左边开始
        int right = height.length - 1; // 右指针，从最右边开始
        int res = 0; // 记录最大面积
        while(left < right){
            // 当前高度由两块板中较矮的那块决定
            int h = Math.min(height[left],height[right]);
            // 宽度是指两个指针之间的距离
            int w = right - left;
            // 当前面积
            int area = h * w;
            // 更新最大值
            res = Math.max(res,area);
            // 关键：移动较矮的那一边
            if(height[left] < height[right]){
                left++;
            }else{
                right--;
            }
        }
        return res;
    }
}